﻿Imports SistemaINCA.Models
Imports System.Net
Imports SistemaINCA.Utilitys
Imports SistemaINCA.Models.ViewModels

Namespace SistemaINCA
    Public Class MatriculaController
        Inherits System.Web.Mvc.Controller

        Private arr_Grados As String() = {"1 Año en Ciencias Economicas", "1 Año General", "2 Año en Ciencias Economicas", "2 Año General", "3 Año en Ciencias Economicas"}

        '
        ' GET: /Matricula
        <AllowAnonymous()> _
        <HttpGet()> _
        Function Index() As ActionResult
            Dim db As New SchoolClickDB_Repositorio
            If Not db.IMatricula.IsPeriodoMatricula Then
                ViewBag.IsPeriodo = False
                ViewBag.InfoPeriodoMatricula = db.IMatricula.GetInfoPeriodoMatricula
            Else
                ViewBag.IsPeriodo = True
            End If
            Return View(New ViewModels.MatriculaModel)
        End Function

        <AllowAnonymous()> _
        <HttpPost()> _
        Function Matricula_Save_Alumno(Model As Models.ViewModels.MatriculaModel) As ActionResult
            Dim db As New SchoolClickDB_Repositorio
            Dim msgError As String = Nothing

            'Comprobamos si el modelo de datos es completamente valido
            If ModelState.IsValid Then
                Try
                    'VERIFICAMOS LOS CAMPOS AUTOCOMPLETADOS QUE SE HAYAN INGRESADO CORRECTAMENTE
                    If Not db.IMatricula.IsExistNIE(Model.frm_NIE) Then
                        ModelState.AddModelError("frm_NIE", "El No. de NIE ingresado ya tiene registrada una solicitud de nuevo ingreso en el sistema.")
                        Exit Try
                    End If
                    If Not db.IDepartamentos.BuscarPais(Model.frm_Pais).Count = 1 Then
                        ModelState.AddModelError("frm_Pais", "El país ingresado no existe en la base de datos.")
                        Exit Try
                    End If
                    If Not db.IDepartamentos.BuscarCentroEscolar(Model.frm_CEProcedencia).Count = 1 Then
                        ModelState.AddModelError("frm_CEProcedencia", "El Centro Escolar de procedencia ingresado no existe en la base de datos.")
                        Exit Try
                    End If
                    If Not db.IDepartamentos.BuscarMunicipio(Model.frm_DepartamentoID, Model.frm_Municipio).Count = 1 Then
                        ModelState.AddModelError("frm_Municipio", "El municipio ingresado no existe en la base de datos o el municipio no pertenece al departamento seleccionado.")
                        Exit Try
                    End If

                    'Una vez validado todos los datos personales del alumno, debemos proceder a guardar los datos
                    Dim res = db.IMatricula.Insert_SolicitudAlumno(Model)
                    Return Json(New With {.success = True, .IDSolicitud = res}, JsonRequestBehavior.AllowGet)
                Catch ex As ApplicationException
                    ModelState.AddModelError("ErrorConnection", ex.Message)
                Catch ex As Exception
                    ModelState.AddModelError("ErrorEx", String.Format("{0}. {1}. {2}", My.Resources.ErrorMessageResources.Error_ThrowException, ex.Message, ex.StackTrace))
                End Try
            End If
            Dim allErrors = ModelState.Values.SelectMany(Function(v) v.Errors)
            'Return Json(New With {.success = False, .RenderPartialView = Utilitys.ControllerExtension.RenderPartialViewToString(Me, "EditorTemplates/MatriculaModel", Model)}, JsonRequestBehavior.AllowGet)
            Return Json(New With {.success = False, .ModelErrors = ModelState.Values.SelectMany(Function(v) v.Errors)}, JsonRequestBehavior.AllowGet)
        End Function

        '
        ' GET: /Matricula/ContinuarProcesoMatricula
        <AllowAnonymous()> _
        <HttpGet()> _
        Function ContinuarProcesoMatricula() As ActionResult
            Dim db As New SchoolClickDB_Repositorio
            Return View()
        End Function

        <AllowAnonymous()> _
        <HttpPost()> _
        Function Matricula_Send_NoSolicitud(param As String) As JsonResult
            Dim db As New SchoolClickDB_Repositorio
            Dim strProtect = HttpUtility.HtmlEncode(param)
            Try
                Dim infoAlumno = db.IMatricula.GetInfoSolicitud(strProtect)
                If infoAlumno IsNot Nothing Then
                    Dim sAño = Date.Now.AddYears(1).Year
                    EmailServices.Send_RecoveryMatricula(New EmailRecoveryMatriculaModel With {.AñoMatricula = sAño.ToString,
                                                                                               .NoSolicitud = infoAlumno.ID_SOLICITUD,
                                                                                               .Correo = infoAlumno.CORREO_ELECTRONICO,
                                                                                               .Nombres = String.Format("{0} {1}", infoAlumno.NOMBRES, infoAlumno.APELLIDOS),
                                                                                               .Grado = arr_Grados(infoAlumno.ID_GRADO_APLICA - 1)},
                                                         Me)
                    Return Json(True, JsonRequestBehavior.AllowGet)
                Else
                    Response.StatusCode = HttpStatusCode.NotFound
                    Return Json(String.Format("Lo sentimos, pero no se encontró ningún alumno registrado con No. de NIE {0} en el sistema", strProtect), JsonRequestBehavior.AllowGet)
                End If
            Catch ex As Exception
                Response.StatusCode = HttpStatusCode.InternalServerError
                Return Json(ex.Message, JsonRequestBehavior.AllowGet)
            End Try
        End Function
    End Class
End Namespace
